/**
 * 提示内容信息
 * @param {Object} option 提示对象内容
 */
const toast = ({
  title = "数据加载中……",
  icon = "none",
  duration = 2000,
  mask = true
} = {}) => {
  wx.showToast({ title, icon, duration, mask });
}

/**
 * 模态显示弹窗信息，返回Promise信息，均为成功执行，如果点击确认，返回true，如果点击取消，则返回false。
 * @param {Object} option 模态显示弹窗信息
 */
const modal = (option = {}) => {
  const defOpt = { title: "提示", content: "确定执行此操作？" };
  const opt = Object.assign({}, defOpt, option);
  return new Promise(resolve => {
    wx.showModal({
      ...opt,
      complete: ({ confirm, cancel }) => {
        confirm && resolve(true);
        cancel && resolve(false);
      }
    })
  })
}

/**
 * 同步设置本地存储数据
 * @param {String} key 存储数据的键名
 * @param {Object} data 存储的数据，可以是任意类型
 */
const setStorage = (key, data) => {
  try {
    wx.setStorageSync(key, data);
  } catch (error) {
    console.log(`存储发生了异常，key=${key}`, error);
  }
}
/**
 * 同步获取本地存储数据。
 * @param {String} key 本地存储数据的键名
 */
const getStorage = key => {
  try {
    return wx.getStorageSync(key);
  } catch (error) {
    console.log(`获取存储数据发生了异常，key:${key}`, error);
  }
}
/**
 * 同步从本地存储删除数据。
 * @param {String} key 要删除数据的键名
 */
const removeStorage = key => {
  try {
    wx.removeStorageSync(key);
  } catch (error) {
    console.log(`从本地存储删除键失败，key=${key}`, error);
  }
}
/**
 * 同步从本地存储清除所有数据
 */
const clearStorage = () => {
  try {
    wx.clearStorageSync();
  } catch (error) {
    console.log(`从本地存储清除所有数据失效`, error);
  }
}
/**
 * 异步存储数据。
 * @param {String} key 异步存储数据键名
 * @param {Object} data 要数据
 */
const setStorageAsync = (key, data) => {
  return new Promise(resolve => {
    wx.setStorage({
      key, data,
      complete: res => resolve(res)
    })
  })
}
/**
 * 异步从本地存储获取指定键名的数据。
 * @param {String} key 要获取数据的键名
 */
const getStorageAsync = key => {
  return new Promise(resolve => {
    wx.getStorage({
      key,
      complete: res => resolve(res)
    })
  })
}
/**
 * 异步从本地移除数据。
 * @param {String} key 要移除的数据键名
 */
const removeStorageAsync = key => {
  return new Promise(resolve => {
    wx.removeStorage({
      key,
      complete: res => resolve(res)
    })
  });
};

/**
 * 异步清除本地存储数据。
 */
const clearStorageAsync = () => {
  return new Promise(resolve => {
    wx.clearStorage({
      complete: res => resolve(res)
    })
  })
}

export {
  toast,
  modal,
  getStorage,
  setStorage,
  removeStorage,
  clearStorage,
  getStorageAsync,
  setStorageAsync,
  removeStorageAsync,
  clearStorageAsync
};